// greedy alg.
// 始终维护最远可达位置，大于len(nums)即返回True
// time: O(n), space: O(1)
func canJump(nums []int) bool {
	maxReach := nums[0]
	last := len(nums)
	for i, v := range nums {
		if maxReach >= last-1 {
			return true
		}

		if i > maxReach {
			return false
		}

		if i+v > maxReach {
			maxReach = i + v
		}
	}
	return false
}